define (require, exports, module) ->

  require 'mods/risk/risk_css.css'
  # 引入API服务
  risk_api = require 'mods/risk/risk_api'

  # 引入风险信息字典
  riskInfo = require 'js/risk_dict.json'

  {getDeviceType} = require 'js/device_type'

  module.exports = Vue.extend

    template: require 'mods/risk/risk_tpl'

    data: () ->
      # 是否加载完成
      loadedSucc: false
      # 加载失败提示语
      loadedFail: ''
      # 设备类型
      device_type: getDeviceType()
      # 风险测评步骤
      step: 0
      # 风险测评类型
      cust_type: '0'
      # 风险描述-个人
      businessDesc: "风险评测是科学投资决策的重要一环,使用本风险评测工具,投资者可以对自己的风险承受能力有一个相对客观的评价,从而能选择更加适合自己的投资产品。本风险评测工具由若干意思明确的单项选择题组成，简单易懂，让您轻松完成风险评测，做好您理财规划的好帮手。"
      # 风险描述-机构
      orgBusinessDesc:'机构-风险评测是科学投资决策的重要一环,使用本风险评测工具,投资者可以对自己的风险承受能力有一个相对客观的评价,从而能选择更加适合自己的投资产品。本风险评测工具由若干意思明确的单项选择题组成，简单易懂，让您轻松完成风险评测，做好您理财规划的好帮手。'
      # 测评题目-个人
      riskQuestions: []
      #问题总数-个人
      questionTotal : 0
      #当前问题位置
      questionIndex : 0
      # 风险测评答案
      answersOpt: ''
      # 风险测评出错提示
      risk_tips: ''
      # 用户信息
      user_info: ''
      # 风险等级
      risk_level: 0
      # 风险等级说明组件 参数
      tipsOpt: {
        # 风险等级
        add_red : 0
      }
      # 测评时间
      risk_time: ''

    methods:
      # 加载成功
      loadedSuccFunc: () ->
        self = @
        self.$nextTick () ->
          # 加载成功标识
          self.loadedSucc = true
          # 插件加载
          self.pluginLoad()

      # 插件加载
      pluginLoad: () ->
        self = @

      # 开始测评-选择类型-获取测评题目
      startExam: (type) ->
        self = @

        self.loadedSucc = false

        params =
          paper_type: '1'
          organ_flag: type

        return risk_api.getRiskQuestion params
          .then (res) ->
            self.step = 1
            # 用户类型
            self.cust_type = type
            # 试题内容
            self.riskQuestions = res?.data?.table_data
            # 试题长度
            self.questionTotal = res?.data?.table_data?.length
            # 加载成功函数
            self.loadedSuccFunc()
          .catch (error) ->
            console.error 'err:',error

      #选中单选框
      checked : (questionNo, answerNo) ->
        self = @
        # 将题号和答案加到客户选项答案串
        self.answersOpt = self.answersOpt + questionNo + ':' + answerNo + '|'
        #计算百分比
        self.questionIndex++
        percent = 0
        percent = Math.ceil(self.questionIndex / self.questionTotal * 100)

        #设置进度条
        $('.progressBar .finished').width(percent + '%')
        $('.progressBar .bubble').css('left', (percent + '%')).text(percent + '%')

        #如果是最后一个
        if self.questionIndex == self.questionTotal
          self.doSubmitRisk()
          self.step = 2
          self.loadedSucc = false

      # new Date() 转换为YYYY年MM月DD日
      fixedDate: (date) ->
        y = date.getFullYear()
        m = date.getMonth()+1
        d = date.getDate()
        if m < 10
          m = '0' + m
        return y + '年' + m + '月' + d + '日'

      # 完成测评提交答案
      doSubmitRisk: () ->
        self = @

        # 获取并格式化测评时间
        self.risk_time = self.fixedDate new Date()

        # 提交参数
        submitParams =
          "op_branch_no": 8888,
          "op_station": "",
          "op_entrust_way": "7",
          "branch_no": 8888,
          "paper_type": "1",
          "organ_flag": "0",
          "option_remark": self.answersOpt,
          "prodta_no": "87"

          "id_no": self.user_info?.id_no
          "id_kind": self.user_info?.id_kind

        risk_api.doSubmitRisk submitParams
          # 成功
          .then (res) ->
            # 获得风险等级、投资期限、投资品种的数字值
            self.risk_level = res?.data?.corp_risk_level
            tzqx = parseInt res?.data?.client_term_type
            tzpz = parseInt res?.data?.client_invest_type

            risk_level_name = riskInfo[0][self.risk_level]?.risk_level_name
            tzqx_name = riskInfo[1][tzqx-1]?.tzqx_name
            tzpz_name = riskInfo[2][tzpz-1]?.tzpz_name

            # 将测评结果保存在session中
            self.user_info.risk_level = self.risk_level
            self.user_info.risk_level_name = risk_level_name
            self.user_info.tzqx = tzqx
            self.user_info.tzqx_name = tzqx_name
            self.user_info.tzpz = tzpz
            self.user_info.tzpz_name = tzpz_name
            user_info_str = JSON.stringify self.user_info
            sessionStorage.setItem 'userInfo', user_info_str

            # 设置风险提示组件参数
            self.tipsOpt =
              add_red : self.risk_level

            # 加载成功函数
            self.loadedSuccFunc()

          # 失败
          .catch (err) ->
            console.error 'err', err

      #返回第一步
      goBack : () ->
        self = @
        self.step = 0
        self.questionIndex = 0
         # 风险等级说明组件 参数
        self.tipsOpt =
          # 风险等级
          add_red : self.risk_level

      #重新评测
      testAgain : () ->
        self = @
        self.result = []
        self.answersOpt = ''
        self.step = 1
        self.questionIndex = 0
        $('.progressBar .finished').width('0%')
        $('.progressBar .bubble').css('left', 0).text('0%')
        return

    # 计算属性
    computed:

      # 加载中的样式
      loaddingClass: () ->
        self = @
        if self.loadedSucc
          return 'c-hidden'
        if self.loadedFail
          return 'c-hidden'
        return ''

      # 加载成功的样式
      loadedSuccClass: () ->
        self = @
        return if self.loadedSucc then '' else 'c-vhidden'

      # 加载失败的样式
      loadedFailClass: () ->
        self = @
        return if self.loadedFail then '' else 'c-hidden'

    # 引用组件
    components:
      'c-tips': require 'mods/risk/tips/tips_mod'

    mounted: () ->
      self = @
      user_info_str = sessionStorage.getItem 'userInfo'
      self.user_info = JSON.parse user_info_str
      self.loadedSuccFunc()